
package br.com.clicarros.controle.cliente;

import br.com.clicarros.dominio.cliente.Cliente;
import br.com.clicarros.dominio.cliente.Endereco;
import br.com.clicarros.fachada.IFachada;
import br.com.clicarros.fachada.implementacao.Fachada;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


/**
 *<p> servlet que realiza o controle das operações relacionadas a clientes </p>
 * @author Luana
 * 
 */
@WebServlet(name = "ControleCliente", urlPatterns = {"/ControleCliente"})
public class ControleCliente extends HttpServlet {

    private IFachada fachada = new Fachada();
    
    /**
     * <p> Método que recebe as requisições das páginas (jsp) </p>
     * @param request requisição enviada pelas páginas (jsp)
     * @param response
     * @throws ServletException
     * @throws IOException 
     */
    
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        
        /**
         * <p> Listagem </p>
         * Ao entrar na página de gestão de clientes é feita uma consulta no banco 
         * e são listados todos os clientes cadastrados
         */
        if(request.getParameter("listar") != null){
                   
            request.setAttribute("clientes", fachada.listarTodos(new Cliente()));
           redireciona(request, response, null);
          
         
        
        }// end if listar
                
                /**
                 * <p> Cadastro </p>
                 * Ao clicar no botão cadastrar são recuperados todos os atributos
                 * do cliente em seguida é chamado o  método salvar da fachada.
                 * após isso é exibida novamente a página de listagem
                 */
                
        else if(request.getParameter("cadastrar") != null){
        
        
        Cliente c = new Cliente();
        
        c.setNome(request.getParameter("nome"));
        c.setSobrenome(request.getParameter("sobrenome"));
        c.setEmail(request.getParameter("email"));
        c.setTelefone(request.getParameter("telefone"));
        c.setCelular(request.getParameter("celular"));
        c.setCpf(request.getParameter("cpf"));
        c.setRg(request.getParameter("rg"));
        
        Endereco end = new Endereco();
        
        end.setCep(request.getParameter("cep"));
        end.setRua(request.getParameter("rua"));
        end.setNumero(Integer.parseInt(request.getParameter("numero")));
        end.setComplemento(request.getParameter("complemento"));
        end.setBairro(request.getParameter("bairro"));
        
        c.setEndereco(end);
        
        
        fachada.inserir(c);
        
        
        request.setAttribute("clientes", fachada.listarTodos(new Cliente()));
        redireciona(request, response, "Cliente Cadastrado");
         
            
    } // end if cadastrar
                
                /**
                 * <p> Excluir </p>
                 * Ao selecionar os clientes que deseja excluir e clicar no botão excluir
                 * o sistema recupera um array de ids (que representa os ids dos clientes que serão deletados)
                 * e varre esse array chamando o método excluir da fachada
                 * após isso é exibida novamente a página de listagem
                 */
 
        else if(request.getParameter("excluir") != null){
          
                             
                String[] ids = request.getParameterValues("id");
           
                for(String id : ids){
              
                    Cliente c = new Cliente();
           
                    c.setIdCliente(Integer.parseInt(id));
                    fachada.excluir(c);
                    }
                request.setAttribute("clientes", fachada.listarTodos(new Cliente()));
                redireciona(request, response, "Cliente(s) Deletado(s)");
           
    }// end if excluir
                
                /**
                 *<p> Editar </p>
                 * Ao Clicar na opção editar o formulario envia o id do cliente a ser editado
                 * é recuperado esse id e chamado o método consultar por id da fachada
                 * após isso é feito o redirecionamento para a página de alteração
                 */
        else if(request.getParameter("editar") != null){
 
            Cliente c = new Cliente();
            c.setIdCliente(Integer.parseInt(request.getParameter("editar")));
            
            request.setAttribute("clientes", fachada.consultarId(c));                  
            request.getRequestDispatcher("Administrador/cliente/AlterarCliente.jsp").forward(request, response);;
            
                   
        } // end if editar
                /**
                 * <p> Alterar </p>
                 * Ao clicar no botão alterar são recuperados todos os atributos
                 * do cliente em seguida é chamado o  método alterar da fachada.
                 * após isso é exibida novamente a página de listagem 
                 */
        else if(request.getParameter("alterar") != null){
            
       Cliente c = new Cliente();
            
        c.setIdCliente(Integer.parseInt(request.getParameter("id")));
        c.setNome(request.getParameter("nome"));
        c.setSobrenome(request.getParameter("sobrenome"));
        c.setEmail(request.getParameter("email"));
        c.setTelefone(request.getParameter("telefone"));
        c.setCelular(request.getParameter("celular"));
        c.setCpf(request.getParameter("cpf"));
        c.setRg(request.getParameter("rg"));
        
        Endereco end = new Endereco();
        
        end.setCep(request.getParameter("cep"));
        end.setRua(request.getParameter("rua"));
        end.setNumero(Integer.parseInt(request.getParameter("numero")));
        end.setComplemento(request.getParameter("complemento"));
        end.setBairro(request.getParameter("bairro"));
        
        c.setEndereco(end);
        
        fachada.alterar(c);
        
        request.setAttribute("clientes", fachada.listarTodos(new Cliente()));
          redireciona(request, response, "Cliente Alterado");
            
        }// end if alterar
                /**
                 * <p> Filtrar </p>
                 * Após informar os dados do clientes que deseja consultar e clicar no botão pesquisar
                 * são recuperados esses dados e chamado o método consultar da fachada
                 * após é redirecionado para a página de listagem apenas os clientes que atendem os parâmetros
                 * da consulta
                 */
    
        else if(request.getParameter("filtrar") != null){
            
               
            Cliente c = new Cliente();
            
            c.setNome(request.getParameter("nome"));
            c.setSobrenome(request.getParameter("sobrenome"));
            c.setEmail(request.getParameter("email"));
            c.setTelefone(request.getParameter("telefone"));
            c.setCelular(request.getParameter("celular"));
            c.setCpf(request.getParameter("cpf"));
            
            request.setAttribute("clientes", fachada.consultar(c));
            redireciona(request, response, null);
        }
    }
    
    
    private void redireciona(HttpServletRequest request,HttpServletResponse response, String mensagem) throws ServletException, IOException{
        
        if(mensagem != null){
            request.setAttribute("mensagem", "<div id=mensagem>"+mensagem+"</div>");
        }
        
        request.getRequestDispatcher("Administrador/cliente/clientes.jsp").forward(request, response);
        
    }
}